package com.itextpdf.text.pdf.table;
import com.itextpdf.testutils.CompareTool;
import com.itextpdf.testutils.TestResourceUtils;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import java.io.*;
public class LargeTableTest {
private String cmpFolder = "./src/test/resources/com/itextpdf/text/pdf/table/largetable/";;
private String outFolder = "./target/com/itextpdf/test/pdf/table/largetable/";
@Before
public void setUp() throws Exception {
new File(outFolder).mkdirs();
TestResourceUtils.purgeTempFiles();
}
@Test
public void testNoChangeInSetSkipFirstHeader() throws DocumentException, IOException {
Document document = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter writer = PdfWriter.getInstance(document, baos);
document.open();
PdfPTable table = new PdfPTable(5);
table.setHeaderRows(1);
table.setSplitRows(false);
table.setComplete(false);
for (int i = 0; i < 5; i++) {
table.addCell("Header " + i);
}
table.addCell("Cell 1");
document.add(table);
Assert.assertFalse(table.isSkipFirstHeader());
table.setComplete(true);
for (int i = 1; i < 5; i++) {
table.addCell("Cell " + i);
}
document.add(table);
document.close();
baos.close();
}
@Test
public void testIncompleteTableAdd01() throws DocumentException, IOException, InterruptedException {
final String file = "incomplete_add01.pdf";
Document document = new Document(PageSize.LETTER);
PdfWriter.getInstance(document, new FileOutputStream(outFolder + file));
document.open();
PdfPTable table = new PdfPTable(5);
table.setHeaderRows(1);
table.setSplitRows(false);
table.setComplete(false);
for (int i = 0; i < 5; i++) {table.addCell("Header " + i);}
for (int i = 0; i < 500; i++) {
if (i%5 == 0) {
document.add(table);
}
table.addCell("Test " + i);
}
table.setComplete(true);
document.add(table);
document.close();
compareTablePdf(file);
}
@Test
public void testIncompleteTableAdd02() throws DocumentException, IOException, InterruptedException {
final String file = "incomplete_add02.pdf";
Document document = new Document(PageSize.LETTER);
PdfWriter.getInstance(document, new FileOutputStream(outFolder + file));
document.open();
PdfPTable table = new PdfPTable(5);
table.setHeaderRows(2);
table.setSplitRows(false);
table.setComplete(false);
for (int i = 0; i < 5; i++) {table.addCell("Header1 \n" + i);}
for (int i = 0; i < 5; i++) {table.addCell("Header2 \n" + i);}
for (int i = 0; i < 500; i++) {
if (i%5 == 0) {
document.add(table);
}
table.addCell("Test " + i);
}
table.setComplete(true);
document.add(table);
document.close();
compareTablePdf(file);
}
@Test
public void testIncompleteTableAdd03() throws DocumentException, IOException, InterruptedException {
final String file = "incomplete_add03.pdf";
Document document = new Document(PageSize.LETTER);
PdfWriter.getInstance(document, new FileOutputStream(outFolder + file));
document.open();
PdfPTable table = new PdfPTable(5);
table.setHeaderRows(2);
table.setFooterRows(1);
table.setSplitRows(false);
table.setComplete(false);
for (int i = 0; i < 5; i++) {table.addCell("Header \n" + i);}
for (int i = 0; i < 5; i++) {table.addCell("Footer \n" + i);}
for (int i = 0; i < 500; i++) {
if (i%5 == 0) {
document.add(table);
}
table.addCell("Test " + i);
}
table.setComplete(true);
document.add(table);
document.close();
compareTablePdf(file);
}
@Test
public void testIncompleteTableAdd04() throws DocumentException, IOException, InterruptedException {
final String file = "incomplete_add04.pdf";
Document document = new Document(PageSize.LETTER);
PdfWriter.getInstance(document, new FileOutputStream(outFolder + file));
document.open();
PdfPTable table = new PdfPTable(5);
table.setHeaderRows(1);
table.setFooterRows(1);
table.setSplitRows(false);
table.setComplete(false);
for (int i = 0; i < 5; i++) {table.addCell("Footer \n" + i);}
for (int i = 0; i < 500; i++) {
if (i%5 == 0) {
document.add(table);
}
table.addCell("Test " + i);
}
table.setComplete(true);
document.add(table);
document.close();
compareTablePdf(file);
}
@Test
public void testIncompleteTable2() throws IOException, DocumentException, InterruptedException {
final String file = "incomplete_table_2.pdf";
Document document = new Document(PageSize.A4.rotate());
PdfWriter.getInstance(document, new FileOutputStream(outFolder + file));
document.open();
Font font = new Font();
float[] widths = new float[]{50f, 50f};
PdfPTable table = new PdfPTable(widths.length);
table.setComplete(false);
table.setWidths(widths);
table.setWidthPercentage(100);
PdfPCell cell = new PdfPCell(new Phrase("Column #1", font));
table.addCell(cell);
cell = new PdfPCell(new Phrase("Column #2", font));
table.addCell(cell);
table.setHeaderRows(1);
for (int i = 0; i < 50; i++) {
cell = new PdfPCell(new Phrase("Table cell #" + i, font));
table.addCell(cell);
cell = new PdfPCell(new Phrase("Blah blah blah", font));
table.addCell(cell);
if (i % 40 == 0) {
document.add(table);
}
}
table.setComplete(true);
document.add(table);
document.close();
compareTablePdf(file);
}
@Test
public void removeRowFromIncompleteTable() throws IOException, DocumentException, InterruptedException {
final String file = "incomplete_table_row_removed.pdf";
Document document = new Document();
PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(outFolder + file));
document.open();
PdfPTable table = new PdfPTable(1);
table.setComplete(false);
table.setTotalWidth(500);
table.setLockedWidth(true);
for (int i = 0; i < 21; i++)
{
PdfPCell cell = new PdfPCell(new Phrase("Test" + i));
table.addCell(cell);
}
table.getRows().remove(20);
document.add(table);
table.setComplete(true);
document.add(table);
document.close();
compareTablePdf(file);
}
@Test
public void nestedHeaderFooter() throws IOException, DocumentException, InterruptedException {
final String file = "nested_header_footer.pdf";
Document document = new Document(PageSize.A4.rotate());
PdfWriter.getInstance(document, new FileOutputStream(outFolder + file));
document.open();
PdfPTable table = new PdfPTable(5);
table.setWidthPercentage(100);
PdfPCell cell = new PdfPCell(new Phrase("Table XYZ (Continued)"));
cell.setColspan(5);
table.addCell(cell);
cell = new PdfPCell(new Phrase("Continue on next page"));
cell.setColspan(5);
table.addCell(cell);
table.setHeaderRows(2);
table.setFooterRows(1);
table.setSkipFirstHeader(true);
table.setSkipLastFooter(true);
for (int i = 0; i < 350; i++) {
table.addCell(String.valueOf(i+1));
}
PdfPTable t = new PdfPTable(1);
PdfPCell c = new PdfPCell(table);
c.setBorderColor(BaseColor.RED);
c.setPadding(3);
t.addCell(c);
document.add(t);
document.close();
compareTablePdf(file);
}
private void compareTablePdf(String file) throws DocumentException, InterruptedException, IOException {
// compare
CompareTool compareTool = new CompareTool();
String errorMessage = compareTool.compareByContent(outFolder + file, cmpFolder + file, outFolder, "diff");
if (errorMessage != null) {
Assert.fail(errorMessage);
}
}
}